package com.kgc.sbt.api;


/**
 * Created on 2021/8/19.
 * <p>
 * Author : Lcywings
 * <p>
 * Description :
 */
public interface RushBApi {
    /**
     * @author : Lcywings
     * @date : 2021/8/12 11:24
     * @acl : true
     * @description : 初始化商品库存数量到redis
     */
    boolean initProdStorkToRedis(Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/12 11:47
     * @acl : true
     * @description : 锁定商品的抢购用户
     */
    boolean lockBuyLimitUser(Integer userId, Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/12 14:05
     * @acl : true
     * @description : 校验商品库存是否充足
     */
    boolean checkProdStock(Integer prodId, Integer buyCount);

    /**
     * @author : Lcywings
     * @date : 2021/8/12 14:13
     * @acl : true
     * @description : 校验库存追否已被锁定，没有就上锁，并增加超时时长
     */
    boolean isProdStockLocked(Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/12 14:29
     * @acl : true
     * @description : 将订单信息存入redis
     */
    void setTradeOrderTORedis(Integer userId, Integer prodId, String tradeOrderNo);

    /**
     * @author : Lcywings
     * @date : 2021/8/13 9:14
     * @acl : true
     * @description : 家宴订单生成状态，0正在生成，1生成成功，3超时取消
     */
    int getCreatedTradeOrderStatus(Integer userId, Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/13 9:41
     * @acl : true
     * @description : 释放锁住的用户
     */
    void unlockBuyLimitUser(Integer userId, Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/13 9:44
     * @acl : true
     * @description : 释放库存锁
     */
    void unlockProdStock(Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/13 9:48
     * @acl : true
     * @description : 抢购成功，扣减库存
     */
    void subProdStockNum(Integer prodId, Integer buyCount);

    /**
     * @author : Lcywings
     * @date : 2021/8/19 14:38
     * @acl : true
     * @description : 调用订单中心接口，生成订单,在订单接口信息
     */
    void createBuyLimitTradeOrder(Integer userId, Integer prodId, Integer buyCount, String tradeOrderNo);

    /**
     * @author : Lcywings
     * @date : 2021/8/20 17:58
     * @acl : true
     * @description : 预约抢购
     */
    Boolean appointment(Integer userId, Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/20 17:58
     * @acl : true
     * @description : 判断是不是抢购物品
     */
    Boolean isM2Product(Integer prodId);

    /**
     * @author : Lcywings
     * @date : 2021/8/20 17:58
     * @acl : true
     * @description : 判断抢购物品是否在预约时间
     */
    Boolean isM2ProductBuyTime(Integer prodId);


    /**
     * @author : Lcywings
     * @date : 2021/8/20 17:58
     * @acl : true
     * @description : 判断抢购物品是否在抢购时间
     */
    Boolean isM2ProductBuyTime2(Integer prodId);
}
